package cbm.seguridad.controller;

import static cbm.commons.UtilitarioFunciones.obtenerValorParametro;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import cbm.commons.ConstantsWeb;
import cbm.commons.LdapHelper;
import cbm.commons.ResultadoOperacionBean;
import cbm.commons.SessionContainer;

import com.grupobbva.bc.per.tele.seguridad.ServiciosSeguridadBbva;

import ejb.cbm.commons.BaseRuntimeException;
import ejb.cbm.commons.CadenaUtil;
import ejb.cbm.commons.FormatoFecha;
import ejb.cbm.seguridad.bean.OpcionBean;
import ejb.cbm.seguridad.bean.PerfilBean;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.bean.UsuarioBean;
import ejb.cbm.seguridad.local.PerfilFacadeLocal;
import ejb.cbm.seguridad.local.RegistroIngresoFacadeLocal;
import ejb.cbm.seguridad.local.UsuarioFacadeLocal;
import ejb.com.bbva.cbm.dominio.CentroCostoEntity;
import ejb.com.bbva.cbm.service.AdministracionServiceLocal;

public class LoginLogoutController extends BaseController{
	
	private static Logger logger = Logger.getLogger(LoginLogoutController.class);
	
	@Autowired	
	private RegistroIngresoFacadeLocal registroIngresoFacadeLocal;
	@Autowired
	private PerfilFacadeLocal perfilFacadeLocal;
	@Autowired
	private UsuarioFacadeLocal usuarioFacadeLocal;
	@Autowired
	private AdministracionServiceLocal administracionServiceLocal;
	
	public void setRegistroIngresoFacadeLocal(RegistroIngresoFacadeLocal registroIngresoFacadeLocal) {
		this.registroIngresoFacadeLocal = registroIngresoFacadeLocal;
	}
	public void setPerfilFacadeLocal(PerfilFacadeLocal perfilFacadeLocal) {
		this.perfilFacadeLocal = perfilFacadeLocal;
	}
	public void setUsuarioFacadeLocal(UsuarioFacadeLocal usuarioFacadeLocal) {
		this.usuarioFacadeLocal = usuarioFacadeLocal;
	}
	
	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("pagina_login");
		return new ModelAndView(request.getContextPath()+"/"+paginaSig);
	}
	
	public void accederDatosAppLocal(String userSession){
		
	}
	
	public ModelAndView loginWebSeal(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		guardaLog("Entro loginWebSeal", request);
		String codigoUsuario = null;
		UsuarioBean usuarioLDAP = null;
		UsuarioBean usuarioLocal = null;
		
		String paginaSig = "";//request.getContextPath();
		
		SessionContainer sessionContainer = new SessionContainer();
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO);
		RegistroIngresoBean ingreso = null;
		String fecha = null;
		List<OpcionBean> listMenu = null;
		String menuOpciones = null;
		PerfilBean perfil = null;

		if (session == null) {
			session = request.getSession(true);
		}
		
		String pagAjaxRequest = resources.getString("ajaxrequest");
		guardaLog("pagina de retorno"+pagAjaxRequest, request);
		try {
			ServiciosSeguridadBbva servicios = new ServiciosSeguridadBbva(request);
			servicios.obtener_ID();
			guardaLog("paso el servicios.obtener_ID()", request);
			codigoUsuario = servicios.getUsuario().toUpperCase();
			
			guardaLog("codigoUsuario "+codigoUsuario , request);
			if(codigoUsuario != null){
				guardaLog("codigoUsuario != null "+codigoUsuario , request);
				//Se obtiene la informacion del usuario logeado del sistema local
				//usuarioLocal = usuarioFacadeLocal.buscar(usuldap);
				
				usuarioLocal = LdapHelper.obtenerUsuarioLdap(codigoUsuario);
				if(usuarioLocal == null)
					throw new BaseRuntimeException("El usuario no se encuentra registrado");
				
				guardaLog("usuarioLocal "+usuarioLocal, request);
				/*IILDPeUsuario IILDusuario = IILDPeUsuario.recuperarUsuario(usuldap);
				usuarioLocal = new UsuarioBean();
				usuarioLocal.setCodigousuario(usuldap);
				usuarioLocal.setCodigooficina(IILDusuario.getBancoOficina().getCodigo());
				usuarioLocal.setCodigoPuesto(IILDusuario.getCargo().getCodigo());				
				usuarioLocal.setNombre(IILDusuario.getNombre());
				usuarioLocal.setApellidopaterno(IILDusuario.getApellido1());
				usuarioLocal.setApellidomaterno(IILDusuario.getApellido2());				
				usuarioLocal.setCorreoelectronico(IILDusuario.getEmail());*/
												
				//Se obtiene el perfil de usuario
				perfil = perfilFacadeLocal.obtienePerfilByCodigoUsuario(usuarioLocal);
				if(perfil == null)
					throw new BaseRuntimeException("El usuario no tiene un Perfil Asignado");
					
				guardaLog("perfil  "+perfil , request);
				fecha = FormatoFecha.dateUtilToStringYYYYMMDD(new Date());
				//Se valida si el usuario ya ha ingresado sus datos de oficina y terminal
				ingreso = registroIngresoFacadeLocal.ultimoRegistroIngreso(codigoUsuario, fecha);
				
				guardaLog("ingreso "+ingreso , request);
				if(ingreso != null && ingreso.getFlagestado()==2){
					ingreso.setFecha(fecha);
					//paginaSig = paginaSig + resources.getString("pagina_principal");
					/*if(perfil.getTipoperfil()==1 && ingreso.getFlagestado()==1){
						paginaSig = paginaSig+resources.getString("pagina_confirmacion_ingreso");
						logger.debug("Ingreso a la pagina de confirmacion " + paginaSig);
						guardaLog("Ingreso a la pagina de confirmacion " + paginaSig,request);
					}else{
						paginaSig = paginaSig + resources.getString("pagina_principal");
						logger.debug("Ingreso a la pagina de principal " + paginaSig);
						guardaLog("Ingreso a la pagina de principal " + paginaSig,request);
					}*/
					
					paginaSig = paginaSig + resources.getString("pagina_principal");
					logger.debug("Ingreso a la pagina de principal " + paginaSig);
					guardaLog("Ingreso a la pagina de principal " + paginaSig,request);
					
					//Se arma las opciones de menu
					listMenu = perfilFacadeLocal.obtenerOpcionesMenuUsuario(usuarioLocal);
					menuOpciones = this.armaMenuUsuario(listMenu);
					sessionContainer.addSessionElement(ConstantsWeb.MENU, menuOpciones);					
				}else{
					guardaLog("no ingreso" ,request);
					paginaSig = paginaSig + resources.getString("datos_ingreso_login");
					guardaLog("paginaSig "+paginaSig ,request);
					ingreso = new RegistroIngresoBean();
					ingreso.setCodigousuario(usuarioLocal.getCodigousuario());
					ingreso.setFecha(FormatoFecha.dateUtilToStringDDMMYYYY(new Date()));
					ingreso.setCodigooficina(usuarioLocal.getCodigooficina());
					
				}
				
				ingreso.setUsuarioBean(usuarioLocal);
				ingreso.getUsuarioBean().setCodigousuario(usuarioLocal.getCodigousuario());
				ingreso.getUsuarioBean().setCodigoPuesto(usuarioLocal.getCodigoPuesto());
				
				ingreso.getUsuarioBean().setPerfilBean(perfil);	
				guardaLog("ingreso "+ingreso ,request);
				guardaLog("usuarioLocal "+usuarioLocal ,request);
				
				CentroCostoEntity centroCosto = administracionServiceLocal.obtenerCentroCostoPorOficinaId(ingreso.getCodigooficina());
				ingreso.setCentroCosto(centroCosto);				
				
				sessionContainer.addSessionElement(ConstantsWeb.REGISTRO_INGRESO, ingreso);
				sessionContainer.addSessionElement(ConstantsWeb.USUARIO, usuarioLocal);

			}else{
				paginaSig = paginaSig + resources.getString("pagina_login2");
				resultado.setResultado(ConstantsWeb.ERROR);
				resultado.setTitulo("Usuario invalido");
				resultado.setMensaje("El usuario ingresado no se encuentra logeado en el LDAP");
			}
		} catch (BaseRuntimeException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje(e.getMessage());
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login2");
			e.printStackTrace();logger.error(e);
		
		} catch (RuntimeException e) {
			guardarMensajeError(request, e);
			resultado.setResultado("Error de Acceso al LDAP");
			resultado.setTitulo("Error");
			resultado.setMensaje("Error de Acceso al LDAP");
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login2");
			e.printStackTrace();logger.error(e);
		} catch (SQLException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("SQLException");
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login2");
			e.printStackTrace();logger.error(e);
		}catch (Exception e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("Exception: " + e.getMessage());
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login2");
			e.printStackTrace();logger.error(e);
		}
		
		resultado.setPagSig(paginaSig);
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		session.setAttribute(ConstantsWeb.SESSION_CONTAINER, sessionContainer);
		
		return new ModelAndView(pagAjaxRequest,"responseText",resultado.getAsArrayJS());
	}

	public ModelAndView login(HttpServletRequest request, HttpServletResponse response){
		logger.debug("Ingreso al metodo");
		guardaLog("ingreso login" ,request);
		HttpSession session = request.getSession(false);
		String codigoUsuario = request.getParameter("txtUsuario").toUpperCase();
		String usuldap = codigoUsuario;//MAV
		UsuarioBean usuarioLDAP = null;
		UsuarioBean usuarioLocal = null;
		String paginaSig = request.getContextPath();
		String pagAjaxRequest = resources.getString("ajaxrequest");
		SessionContainer sessionContainer = new SessionContainer();
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO);
		RegistroIngresoBean ingreso = null;
		String fecha = null;
		List<OpcionBean> listMenu = null;
		String menuOpciones = null;
		PerfilBean perfil = null;

		if (session == null) {
			session = request.getSession(true);
			guardaLog("session =null" ,request);
		}
		
		try {
			logger.debug("Validamos el usuario "+codigoUsuario);
			//System.out.println("Validamos el usuario "+codigoUsuario);
			if(usuldap != null && codigoUsuario == usuldap){
				guardaLog("usuldap != null && codigoUsuario == usuldap" ,request);
				usuarioLDAP = new UsuarioBean();
				codigoUsuario = codigoUsuario.trim();
				//Se obtiene la informacion del usuario logeado del sistema local
				logger.debug("Buscamos el usuario en las tablas internas");
				//System.out.println("Buscamos el usuario en las tablas internas");
				usuarioLocal = usuarioFacadeLocal.buscar(codigoUsuario);
				logger.debug("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():""));
				//System.out.println("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():""));
				guardaLog("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():"") ,request);
				if(usuarioLocal == null) {
					logger.debug("Buscamos el usuario en la BD del LDAP");
					//System.out.println("Buscamos el usuario en la BD del LDAP");
					guardaLog("usuario = null",request);
					usuarioLocal = LdapHelper.obtenerUsuarioLdap(codigoUsuario);
					logger.debug("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():""));
					guardaLog("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():""),request);
					//System.out.println("usuario = "+((usuarioLocal!=null)?usuarioLocal.getNombrecompleto():""));
				}
				if(usuarioLocal == null)
					throw new BaseRuntimeException("El usuario no se encuentra registrado en el LDAP");
				
				fecha = FormatoFecha.dateUtilToStringYYYYMMDD(new Date());
				//Se valida si el usuario ya ha ingresado sus datos de oficina y terminal
				logger.debug("Verificamos si el usuario ya ingreso al sistema");
				//System.out.println("Verificamos si el usuario ya ingreso al sistema");
				ingreso = registroIngresoFacadeLocal.ultimoRegistroIngreso(codigoUsuario, fecha);
				logger.debug("ingreso = "+((ingreso!=null)?ingreso.getTextoheaderhtml():""));
				//System.out.println("ingreso = "+((ingreso!=null)?ingreso.getTextoheaderhtml():""));
				guardaLog("ingreso = "+((ingreso!=null)?ingreso.getTextoheaderhtml():""),request);
				
				//Se obtiene el perfil de usuario
				logger.debug("Obtenemos los datos del perfil del usuario "+codigoUsuario);
				guardaLog("Obtenemos los datos del perfil del usuario "+codigoUsuario,request);
				perfil = perfilFacadeLocal.obtienePerfilByCodigoUsuario(usuarioLocal);
				logger.debug("perfil = "+((perfil!=null)?perfil.getDescripcionperfil():""));
				guardaLog("Obtenemos los datos del perfil del usuario "+codigoUsuario,request);
				if(perfil == null)
					throw new BaseRuntimeException("El usuario no tiene un Perfil Asignado");
				
				if(ingreso != null && ingreso.getFlagestado()==2){
					ingreso.setFecha(fecha);
					/*if(perfil.getTipoperfil()==1){
						paginaSig = paginaSig+resources.getString("pagina_confirmacion_ingreso");
						logger.debug("Ingreso a la pagina de confirmacion " + paginaSig);
						guardaLog("Ingreso a la pagina de confirmacion " + paginaSig,request);
					}else{
						paginaSig = paginaSig + resources.getString("pagina_principal");
						logger.debug("Ingreso a la pagina de principal " + paginaSig);
						guardaLog("Ingreso a la pagina de principal " + paginaSig,request);
					}*/
					paginaSig = paginaSig + resources.getString("pagina_principal");
					logger.debug("Ingreso a la pagina de principal " + paginaSig);
					guardaLog("Ingreso a la pagina de principal " + paginaSig,request);
					
					//Se arma las opciones de menu
					listMenu = perfilFacadeLocal.obtenerOpcionesMenuUsuario(usuarioLocal);
					menuOpciones = this.armaMenuUsuario(listMenu);
					sessionContainer.addSessionElement(ConstantsWeb.MENU, menuOpciones);
					
				}else{
					guardaLog("ingreso != null",request);
					paginaSig = paginaSig + resources.getString("datos_ingreso_login");
					ingreso = new RegistroIngresoBean();
					ingreso.setCodigousuario(usuarioLocal.getCodigousuario());
					ingreso.setFecha(FormatoFecha.dateUtilToStringDDMMYYYY(new Date()));
					ingreso.setCodigooficina(usuarioLocal.getCodigooficina());
				}
				
				ingreso.setUsuarioBean(usuarioLocal);
				ingreso.getUsuarioBean().setCodigousuario(usuarioLocal.getCodigousuario());
				ingreso.getUsuarioBean().setCodigoPuesto(usuarioLocal.getCodigoPuesto());
				
				CentroCostoEntity centroCosto = administracionServiceLocal.obtenerCentroCostoPorOficinaId(ingreso.getCodigooficina());
				ingreso.setCentroCosto(centroCosto);
				
				ingreso.getUsuarioBean().setPerfilBean(perfil);	
				
				sessionContainer.addSessionElement(ConstantsWeb.REGISTRO_INGRESO, ingreso);
				sessionContainer.addSessionElement(ConstantsWeb.USUARIO, usuarioLocal);

			}else{
				paginaSig = paginaSig + resources.getString("pagina_login");
				resultado.setResultado(ConstantsWeb.ERROR);
				resultado.setTitulo("Usuario invalido");
				resultado.setMensaje("El usuario ingresado no se encuentra logeado en el LDAP");
				guardaLog("El usuario ingresado no se encuentra logeado en el LDAP",request);
			}
		} catch (BaseRuntimeException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje(e.getMessage());
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login");
			e.printStackTrace();logger.error(e);

		} catch (RuntimeException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("RuntimeException");
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login");
			e.printStackTrace();logger.error(e);
		} catch (SQLException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("SQLException");
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login");
			e.printStackTrace();logger.error(e);
		}catch (Exception e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("Exception");
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = paginaSig + resources.getString("pagina_login");
			e.printStackTrace();logger.error(e);
		}
		
		resultado.setPagSig(paginaSig);
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		session.setAttribute(ConstantsWeb.SESSION_CONTAINER, sessionContainer);
		
		return new ModelAndView(pagAjaxRequest,"responseText",resultado.getAsArrayJS());
	}

	public ModelAndView logout(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("pagina_expira");
		HttpSession session = request.getSession(false);
		session.invalidate();
		request.setAttribute("tipoMensaje", "2");
		return new ModelAndView(paginaSig);
	}

	public ModelAndView registroIngreso(HttpServletRequest request, HttpServletResponse response){
		
		HttpSession session = request.getSession(false);
		String paginaSig = resources.getString("pagina_principal");
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		logger.info("sessionContainer:"+sessionContainer);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroIngresoBean registroIngresoBean = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		List<OpcionBean> listMenu = null;
		String menuOpciones = null;
		RegistroIngresoBean filtroRegistro = null;
		
		try{
			String oficina = request.getParameter("txtOficina").toUpperCase();
			String terminal = request.getParameter("txtTerminal").toUpperCase();
			String fecha    = request.getParameter("txtFecha");
			
			//Se valida si ya existe un usuario de la misma oficia logeado con la
			//misma terminal
			filtroRegistro = new RegistroIngresoBean();
			filtroRegistro.setCodigooficina(oficina);
			filtroRegistro.setCodigoterminal(terminal);
			filtroRegistro.setFlagestado(new Long(2));
			filtroRegistro.setFecharegistro(FormatoFecha.stringToDate(fecha));
			
			if(registroIngresoFacadeLocal.buscar(filtroRegistro).size() > 0 ){
				paginaSig = resources.getString("datos_ingreso_login");
				resultado.setResultado(ConstantsWeb.ERROR);
				resultado.setTitulo(resources.getString("titulo_error"));
				resultado.setMensaje(resources.getString("terminal_en_uso"));
			}else{
			
				filtroRegistro = new RegistroIngresoBean();
				filtroRegistro.setCodigousuario(usuarioLogeado.getCodigousuario());
				filtroRegistro.setFecharegistro(FormatoFecha.stringToDate(fecha));
				filtroRegistro.setFlagestado(new Long(1));
				
				List<RegistroIngresoBean> lstRegistro = registroIngresoFacadeLocal.buscar(filtroRegistro);
				
				if(lstRegistro.size() > 0 ){
					RegistroIngresoBean regTem = lstRegistro.get(0); 
					regTem.setCodigooficina(oficina);
					regTem.setCodigoterminal(terminal); 
					registroIngresoBean.setCodigooficina(oficina);
					registroIngresoBean.setCodigoterminal(terminal);	
					CentroCostoEntity centroCosto = administracionServiceLocal.obtenerCentroCostoPorOficinaId(registroIngresoBean.getCodigooficina());
					registroIngresoBean.setCentroCosto(centroCosto);
					regTem.setCentroCosto(centroCosto);
					
					registroIngresoFacadeLocal.save(regTem,usuarioLogeado);
					
					//Se arma las opciones de menu
					listMenu = perfilFacadeLocal.obtenerOpcionesMenuUsuario(usuarioLogeado);
					menuOpciones = this.armaMenuUsuario(listMenu);
					sessionContainer.addSessionElement(ConstantsWeb.MENU, menuOpciones);
					
					PerfilBean perfil = perfilFacadeLocal.obtienePerfilByCodigoUsuario(usuarioLogeado);
					if(perfil.getTipoperfil()==1){
						paginaSig = resources.getString("pagina_confirmacion_ingreso");
					}
				}
				else{
					//Se crea el registro de ingreso del usuario
					registroIngresoBean.setCodigooficina(oficina);
					registroIngresoBean.setCodigoterminal(terminal);
					registroIngresoBean.setCodigousuario(usuarioLogeado.getCodigousuario());
					registroIngresoBean.setFlagestado(new Long(1));
					registroIngresoBean.setFlagactivo(new Long(1));
					
					CentroCostoEntity centroCosto = administracionServiceLocal.obtenerCentroCostoPorOficinaId(registroIngresoBean.getCodigooficina());
					registroIngresoBean.setCentroCosto(centroCosto);
					
					registroIngresoFacadeLocal.save(registroIngresoBean,usuarioLogeado);
					
					//Se arma las opciones de menu
					listMenu = perfilFacadeLocal.obtenerOpcionesMenuUsuario(usuarioLogeado);
					menuOpciones = this.armaMenuUsuario(listMenu);
					sessionContainer.addSessionElement(ConstantsWeb.MENU, menuOpciones);
					
					PerfilBean perfil = perfilFacadeLocal.obtienePerfilByCodigoUsuario(usuarioLogeado);
					if(perfil.getTipoperfil()==1){
						paginaSig = resources.getString("pagina_confirmacion_ingreso");
					}
				}
			}
		} catch (RuntimeException e) {
			guardarMensajeError(request, e);
			paginaSig = resources.getString("datos_ingreso_login");
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();logger.error(e);
		} catch (SQLException e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = resources.getString("datos_ingreso_login");
			e.printStackTrace();logger.error(e);
		}catch (Exception e) {
			guardarMensajeError(request, e);
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			//resultado.setTrace(StackTrace2String.stackTraceToString(e));
			paginaSig = resources.getString("pagina_login");
			e.printStackTrace();logger.error(e);
		}
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		
		return new ModelAndView(paginaSig,ConstantsWeb.RPTA_AJAX_REQUEXT,resultado.getAsArrayJS());
	}
	
	private String armaMenuUsuario(List<OpcionBean> menu){

		StringBuilder sbMenu = new StringBuilder();
		
		sbMenu.append(" var MENU_ITEMS = [\n");
		
		for(OpcionBean menu1 : menu){
			
			sbMenu.append(" [ '" + menu1.getTexto() + "',null,null,\n");
			
			for(OpcionBean menu2 : menu1.getOpciones()){
				sbMenu.append(" [ '" + menu2.getTexto() + "'," + CadenaUtil.apostrofe(menu2.getAccion())+",null,\n");
				
				for(OpcionBean menu3 : menu2.getOpciones()){
					sbMenu.append(" [ '" + menu3.getTexto() + "'," + CadenaUtil.apostrofe(menu3.getAccion())+",null,],\n");
				}
				sbMenu.append("],\n");
			}
			sbMenu.append("],\n");
		}
		
		sbMenu.append("];");
		
		return sbMenu.toString();
	}
	
	public ModelAndView verificarAutorizacion(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("pagina_confirmacion_ingreso");
		RegistroIngresoBean ingreso = null;
		HttpSession session = request.getSession();
		String fecha = FormatoFecha.dateUtilToStringYYYYMMDD(new Date());
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		try{
		//Se valida si el usuario ya ha ingresado sus datos de oficina y terminal
		ingreso = registroIngresoFacadeLocal.ultimoRegistroIngreso(usuarioLogeado.getCodigousuario(), fecha);
		PerfilBean perfil = perfilFacadeLocal.obtienePerfilByCodigoUsuario(usuarioLogeado);
		if(ingreso != null){
			if(perfil.getTipoperfil()==1 && ingreso.getFlagestado()== 2){
				paginaSig = resources.getString("pagina_principal");
			}
		}
		}catch(Exception e){
			guardarMensajeError(request, e);
			e.printStackTrace();logger.error(e);
		}
		return new ModelAndView(paginaSig);
	}
	
	public ModelAndView irPaginaModificarDatos(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession();
		String paginaSig = resources.getString("datos_ingreso_login");
		ResultadoOperacionBean resultado = new ResultadoOperacionBean("VACIO");
		resultado.setPagSig(paginaSig);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		
		return new ModelAndView(paginaSig,ConstantsWeb.RPTA_AJAX_REQUEXT,resultado.getAsArrayJS());
	}
	
	public ModelAndView verificarOficina(HttpServletRequest request, HttpServletResponse response){
		String flgOficina;
		String paginaSig    = resources.getString("ajaxrequest");
		String oficina = obtenerValorParametro(request.getParameter("txtOficina"));
		try{
			flgOficina=registroIngresoFacadeLocal.verificarOficina(oficina);
		}catch(Exception e){
			flgOficina ="-1";
		}
		return new ModelAndView(paginaSig,"responseText",flgOficina);
	}
}